昨天解完題後跑測試個案,發現負數的test case都跑不過,會出現這個錯誤:
Line 3: ValueError: invalid literal for int() with base 10: '-'
但我找不出來這行程式哪邊有問題,就在網路上查其他人的解法.
找的時候我看到了這題的一個提示:
负数都不是回文数;
的確,因為輸入的條件是"整數"型態,負數肯定不會是回文數的
所以我在我的code前面加了兩行做判斷,變成這樣:
    def isPalindrome(self, x: int) -> bool:
        if x < 0 :
            return False
        inputlist = list(map(int, str(x)))
        k = 1
        if (len(inputlist) % 2) == 0 :
            for i in inputlist:
                k += 1
                if inputlist[i] != inputlist[-k] :
                    return False
                if i == (len(inputlist) // 2) :
                    return True
        else:
            for i in inputlist:
                k += 1
                if i == (len(inputlist) // 2 + 1) :
                    return True
                if inputlist[i] != inputlist[-k] :
                    return False
改成這樣之後跑負數的測試個案就正確了!所以我就很放心的submit出去.
然後就遇到了下一個問題
Line 20: IndexError: list index out of range
查到這有兩種可能:
1.list[index]index超出范围
2.list是一个空的 没有一个元素 进行list[0]就会出现该错误
透過測試個案測試確認過,如果是輸入"0"的話就會有這個錯誤
所以我就很笨的再加了兩行把0的狀況判斷出去
    def isPalindrome(self, x: int) -> bool:
        if x < 0 :
            return False
        elif x == 0 :
            return True
        inputlist = list(map(int, str(x)))
        k = 1
        if (len(inputlist) % 2) == 0 :
            for i in inputlist:
                k += 1
                if inputlist[i] != inputlist[-k] :
                    return False
                if i == (len(inputlist) // 2) :
                    return True
        else:
            for i in inputlist:
                k += 1
                if i == (len(inputlist) // 2 + 1) :
                    return True
                if inputlist[i] != inputlist[-k] :
                    return False
又臭又長的,submit出去之後還是出現一樣的error...Q.Q
看來一開始想到的解法還是有問題
先沉澱下,明天繼續
9. Palindrome Number [easy] (Python)
IndexError: list index out of range的错误原因